package model;

import java.awt.Point;
import java.util.ArrayList;

public class Grille {
	protected ArrayList<Case> grille;
	
	/****************************************************************
	  public Grille()
	  public Case getCase(int x, int y)		x, y = [0;2]
	  public Case getCase(Point p)
	  public Point getCoord(Case c)
	 ***************************************************************/
	
	/*** Constructeur ***/
	public Grille(){
		grille = new ArrayList<Case>();
		
		for(int i = 0; i < 9; i++){
			grille.add(new Case());
		}
	}
	
	public Grille(Grille g){
		grille = new ArrayList<Case>();
		
		for(int i = 0; i < 9; i++){
			grille.add(new Case(g.getCase(i)));
		}
	}
	
	/*** isFull ***/
	public boolean isFull(){
		boolean result = true;
		for(int i = 0; i < grille.size(); i++){
			if(getCase(i).isVide())
				return false;
		}
		
		return result;
	}
	
	/*** isGagnant ***/
	public boolean isGagnant(int joueur){
		boolean result = false;
		
		for(int col=0; col < 3; col++){
			if( getCase(0,col).getContenu() == joueur &&
				getCase(1,col).getContenu() == joueur &&
				getCase(2,col).getContenu() == joueur)
				return true;
		}
		
		for(int ligne=0; ligne < 3; ligne++){
			if( getCase(ligne,0).getContenu() == joueur &&
				getCase(ligne,1).getContenu() == joueur &&
				getCase(ligne,2).getContenu() == joueur)
				return true;
		}
		
		if( getCase(0,0).getContenu() == joueur &&
			getCase(1,1).getContenu() == joueur &&
			getCase(2,2).getContenu() == joueur)
				return true;
		
		if( getCase(0,2).getContenu() == joueur &&
			getCase(1,1).getContenu() == joueur &&
			getCase(2,0).getContenu() == joueur)
					return true;
		
		return result;
	}
	
	/*** getCoord ***/
	public Point getCoord(Case c){
		int index = grille.indexOf(c);
		int ligne = index / 3;
		int colonne = index % 3;
		
		return new Point(ligne,colonne);
	}
	
	/*** getCase ***/
	// /!\ CORRECTION APPORTE PAR RAPPORT A LA VERSION DROPBOX /!\
	public Case getCase(int ligne, int colonne){
		int x = ligne;
		int y = colonne;
		if(x >= 0 && x <= 2 && y >= 0 && y <= 2){
			int ind = 3*x + y;
			return(grille.get(ind));
		}else{
			System.out.println("ERREUR: Classe Grille: getCase(): Coord. x ou y en dehors de [0;2].");
			return(null);
		}
	}
	
	public Case getCase(Point p){
		return(getCase(p.x, p.y));
	}
	
	public Case getCase(int _index){
		return grille.get(_index);
	}
	
	/*** clear ***/
	public void clear(){
		for(int i=0; i<9; i++){
			grille.get(i).setVide();
		}
	}
	
	/*** toString ***/
	public String toString(){
		String texte = new String("\n\n");
		for(int j=0; j<=2; j++){
			for(int i=0; i<=2; i++){
				texte = texte + getCase(j, i).getContenu() + "   ";
			}
			texte = texte + "\n";
		}
		
		return(texte);
	}
}
